package soft;

import java.util.Random;
import java.util.HashSet;
import java.util.Set;

public class Calculation_System_V03 {
    public static void main(String[] args) {
        // 系统标题
        System.out.println("加减法口算练习系统-v0.3");
        System.out.println("========================");
        System.out.println("特点：");
        System.out.println("- 避免重复算式");
        System.out.println("- 控制加减法比例(加法70%，减法30%)");
        System.out.println("========================");

        // 创建随机数生成器
        Random random = new Random();

        // 使用集合存储已生成的算式，避免重复
        Set<String> generatedEquations = new HashSet<>();

        // 生成50道题目
        int count = 0;
        while (count < 50) {
            // 生成0-200的随机数
            int num1 = random.nextInt(201);
            int num2 = random.nextInt(201);
            int result;
            String equationKey; // 用于判断重复的键
            String expression; // 用于输出的表达式

            // 控制加减法比例：70%加法，30%减法
            boolean isAddition = random.nextDouble() < 0.7;

            if (isAddition) {
                // 加法算式
                result = num1 + num2;
                equationKey = num1 + "+" + num2; // 创建唯一标识
                expression = String.format("%3d + %3d = %4d", num1, num2, result);
            } else {
                // 减法算式
                result = num1 - num2;
                equationKey = num1 + "-" + num2; // 创建唯一标识
                expression = String.format("%3d - %3d = %4d", num1, num2, result);
            }

            // 检查是否已经生成过这个算式
            if (!generatedEquations.contains(equationKey)) {
                // 如果没有重复，添加到集合并输出
                generatedEquations.add(equationKey);
                count++;

                // 输出算式，每行3个
                System.out.print(expression);

                // 添加适当间距，确保整齐
                if (count % 3 != 0) {
                    System.out.print("    "); // 4个空格作为间距
                } else {
                    System.out.println(); // 换行
                }
            }
            // 如果重复，不计数，继续循环生成新的算式
        }

        // 如果最后一行不满3个，添加换行
        if (50 % 3 != 0) {
            System.out.println();
        }

        System.out.println("========================");
        System.out.println("50道题目生成完成！");
        System.out.println("加法题目数量: " + countAddition(generatedEquations));
        System.out.println("减法题目数量: " + countSubtraction(generatedEquations));
    }

    // 统计加法题目数量
    private static int countAddition(Set<String> equations) {
        int count = 0;
        for (String eq : equations) {
            if (eq.contains("+")) {
                count++;
            }
        }
        return count;
    }

    // 统计减法题目数量
    private static int countSubtraction(Set<String> equations) {
        int count = 0;
        for (String eq : equations) {
            if (eq.contains("-")) {
                count++;
            }
        }
        return count;
    }
}
